const mysql = require('mysql2/promise');
const pool = mysql.createPool({
  host: process.env.DB_HOST || 'localhost',
  user: process.env.DB_USER || 'root',
  password: process.env.DB_PASSWORD || 'root',
  database: process.env.DB_NAME || 'blog',
  waitForConnections: true,
  connectionLimit: 10,
  queueLimit: 0
});

// 初始化用户表
// 优化初始化函数，只在真正创建时输出日志
async function initUserTable() {
  try {
    const [result] = await pool.query(`
      CREATE TABLE IF NOT EXISTS users (
        id INT AUTO_INCREMENT PRIMARY KEY,
        username VARCHAR(50) UNIQUE NOT NULL,
        password VARCHAR(255) NOT NULL
      )
    `);

    // 只在表真正被创建时输出日志
    if (result.warningStatus === 0) {
      console.log('✅ 用户表创建成功');
    } else {
      console.log('ℹ️  用户表已存在，无需创建');
    }
  } catch (err) {
    console.error('用户表初始化失败:', err);
    throw err; // 抛出错误让上层处理
  }
}

// 其他表的初始化函数也做类似优化...

// 初始化文章表
async function initArticleTable() {
  try {
    // 修改articles表创建语句
    await pool.query(`
      CREATE TABLE IF NOT EXISTS articles (
        id INT AUTO_INCREMENT PRIMARY KEY,
        title VARCHAR(255) NOT NULL,
        content MEDIUMTEXT NOT NULL,
        category_id INT, -- 修改为外键
        author_id INT NOT NULL,
        create_time DATETIME DEFAULT CURRENT_TIMESTAMP,
        update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
        status TINYINT DEFAULT 1,
        FOREIGN KEY (author_id) REFERENCES users(id),
        FOREIGN KEY (category_id) REFERENCES categories(id) -- 添加分类外键
      )
    `);
    console.log('文章表初始化完成');
  } catch (err) {
    console.error('文章表初始化失败:', err);
  }
}
// 初始化分类表
async function initCategoryTable() {
  try {
    await pool.query(`
      CREATE TABLE IF NOT EXISTS categories (
        id INT AUTO_INCREMENT PRIMARY KEY,
        name VARCHAR(50) UNIQUE NOT NULL
      )
    `);
    console.log('分类表初始化完成');
  } catch (err) {
    console.error('分类表初始化失败:', err);
  }
}

// 初始化标签表
async function initTagTable() {
  try {
    await pool.query(`
      CREATE TABLE IF NOT EXISTS tags (
        id INT AUTO_INCREMENT PRIMARY KEY,
        name VARCHAR(50) UNIQUE NOT NULL,
        count INT DEFAULT 0 COMMENT '文章使用次数'
      )
    `);
    console.log('标签表初始化完成');
  } catch (err) {
    console.error('标签表初始化失败:', err);
  }
}

// 初始化文章-标签关联表
async function initArticleTagTable() {
  try {
    await pool.query(`
      CREATE TABLE IF NOT EXISTS article_tags (
        article_id INT NOT NULL,
        tag_id INT NOT NULL,
        PRIMARY KEY (article_id, tag_id),
        FOREIGN KEY (article_id) REFERENCES articles(id) ON DELETE CASCADE,
        FOREIGN KEY (tag_id) REFERENCES tags(id)
      )
    `);
    console.log('文章-标签关联表初始化完成');
  } catch (err) {
    console.error('文章-标签关联表初始化失败:', err);
  }
}

// 初始化关于页面表
async function initAboutTable() {
  try {
    await pool.query(`
      CREATE TABLE IF NOT EXISTS about (
        id INT PRIMARY KEY DEFAULT 1,
        content TEXT NOT NULL
      )
    `);
    console.log('关于页面表初始化完成');
  } catch (err) {
    console.error('关于页面表初始化失败:', err);
  }
}

// 初始化全局配置表
async function initSettingsTable() {
  try {
    await pool.query(`
      CREATE TABLE IF NOT EXISTS settings (
        id INT AUTO_INCREMENT PRIMARY KEY,
        setting_key VARCHAR(50) UNIQUE NOT NULL,
        setting_value TEXT NOT NULL,
        description VARCHAR(255)
      )
    `);
    console.log('全局配置表初始化完成');
  } catch (err) {
    console.error('全局配置表初始化失败:', err);
  }
}

// 修改表存在检查函数，确保正确处理
async function checkTableExists(tableName) {
  try {
    const [rows] = await pool.query(
      'SELECT COUNT(*) as count FROM information_schema.tables WHERE table_schema = DATABASE() AND table_name = ?',
      [tableName]
    );

    // 确保返回的是数字
    const count = parseInt(rows[0].count, 10);
    const exists = count > 0;

    // console.log(`检查表 ${tableName}: ${exists ? '存在' : '不存在'}`);
    return exists;

  } catch (error) {
    console.error(`检查表 ${tableName} 是否存在时出错:`, error);
    // 出错时假设表不存在，让初始化函数去尝试创建
    return false;
  }
}

module.exports = {
  pool,
  initUserTable,
  initArticleTable,
  initCategoryTable,
  initTagTable,
  initAboutTable,
  initSettingsTable,
  checkTableExists,
  initArticleTagTable
};